﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Net.Mail;
using System.Net;
using System.IO;
using System.Text.RegularExpressions;

namespace TwoGesture
{
    public partial class FormAdmin : Form
    {
        private ControlAdministrador ObjCtrAdministrador = ControlAdministrador.InsCtrAdministrador();
        private ControlPregunta ObjCtrPregunta = ControlPregunta.InsControlPregunta();
        private string valor = string.Empty;
        private string banderausuario = string.Empty;
        private BindingSource bindingsource1 = new BindingSource();
        private SqlDataAdapter dataAdapter = new SqlDataAdapter();
        private MailMessage mail;
        private string To;
        private string bancorreo;
        private string Body;
        private String subject;

        public FormAdmin()
        {
            InitializeComponent();

        }

        public FormAdmin(string valor_)
        {
            valor = valor_;
            InitializeComponent();
        }

        private void Formulario1_Load(object sender, EventArgs e)
        {
            this.LblIdDoctor.Text = ObjCtrAdministrador.idDoctor();
            this.LlenarTabla();
            this.LLenarCmoCategorias();
            this.LlenarTablaPregunta();
        }

        //--------------------------------------------------------------------------------
        //-----------------------Formulario Agragar Paciente------------------------------
        //--------------------------------------------------------------------------------

        //Boton Guardar del formulario de registro de Pacientes
        public void BtnGuardar_Click(object sender, EventArgs e)
        {

            bool bandera = ObjCtrAdministrador.ValidarFormulario(TxtNombre, TxtApaterno, TxtAmaterno, LblUsuario, LblContrasenia, LblIdPaciente, TxtCorreo);
            if (bandera.Equals(true))
            {
                ObjCtrAdministrador.GuardarUsuario(TxtNombre, TxtApaterno, TxtAmaterno, LblUsuario, LblContrasenia, LblIdDoctor, LblIdPaciente);
                this.LlenarTabla();
                this.LimpiarUsuario();
            }


            if (!(TxtCorreo.Text.Trim() == ""))
            {

                To = TxtCorreo.Text;
                subject = "TwoGestures";
                mail = new MailMessage();
                mail.To.Add(new MailAddress(this.To));
                mail.From = new MailAddress("twogestures@hotmail.com");
                mail.Subject = subject;
                Body = HttpContent("http://twogestures.site90.com/TwoGestures.html");
                string nomcomple = TxtNombre.Text.ToString() + " " + TxtApaterno.Text.ToString() + " " + TxtAmaterno.Text.ToString();
                string usuario = LblUsuario.Text;
                string contrasenia = LblContrasenia.Text;
                String body1 = Body.Replace("nombredoctor", nomcomple);
                string body2 = body1.Replace("nombreusuario", usuario);
                string body3 = body2.Replace("password", contrasenia);
                mail.Body = body3;
                mail.IsBodyHtml = true;

                SmtpClient cliente = new SmtpClient("smtp.live.com", 587);
                using (cliente)
                {
                    cliente.Credentials = new System.Net.NetworkCredential("twogestures@hotmail.com", "Mipassword");
                    cliente.EnableSsl = true;
                    cliente.Send(mail);
                }
            } 
        }
        public string HttpContent (string url)
        {
            WebRequest objRecuest = System.Net.HttpWebRequest.Create(url);
            StreamReader reader = new StreamReader(objRecuest.GetResponse().GetResponseStream());
            string result = reader.ReadToEnd();
            return result;
        }


       

        //Metodo que llena la tabla del formulario de registro de pacientes
        public void LlenarTabla()
        {
            SqlDataReader dr = ObjCtrAdministrador.LlenarTabla(this.LblIdDoctor);
            dgvUsuarios.ColumnCount = 6;
            dgvUsuarios.Columns[0].Name = "ID";
            dgvUsuarios.Columns[1].Name = "Nombre";
            dgvUsuarios.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
            dgvUsuarios.Columns[2].Name = "nnombre";
            dgvUsuarios.Columns[2].Visible = false;
            dgvUsuarios.Columns[3].Name = "apaterno";
            dgvUsuarios.Columns[3].Visible = false;
            dgvUsuarios.Columns[4].Name = "amaterno";
            dgvUsuarios.Columns[4].Visible = false;
            dgvUsuarios.Columns[5].Name = "Usuario";
            dgvUsuarios.Rows.Clear();

            while (dr.Read())
            {
                dgvUsuarios.Rows.Add(dr.GetInt32(0), dr.GetString(1) + " " + dr.GetString(2) + " " + dr.GetString(3),
                    dr.GetString(1), dr.GetString(2), dr.GetString(3), dr.GetString(4));
            }

            this.dgvUsuarios.CellClick += (this.dgvUsuarios_click);
        }
        //Evento que llena los campos de formulario de registro de pacientes con datos de la tabla
        private void dgvUsuarios_click(object sender, DataGridViewCellEventArgs e)
        {
            int rowIndex = e.RowIndex;
            if (rowIndex >= 0)
            {
                TxtNombre.Text = dgvUsuarios.Rows[rowIndex].Cells[2].Value.ToString();
                TxtApaterno.Text = dgvUsuarios.Rows[rowIndex].Cells[3].Value.ToString();
                TxtAmaterno.Text = dgvUsuarios.Rows[rowIndex].Cells[4].Value.ToString();
                LblIdPaciente.Text = dgvUsuarios.Rows[rowIndex].Cells[0].Value.ToString();
                LblNombreCompleto.Text = dgvUsuarios.Rows[rowIndex].Cells[1].Value.ToString();
                this.BtnGenerarContrasenia.Enabled = false;
            }

        }
        //Boton generarcontroseña del formulario de registro de pacientes 
        private void BtnGenerarContrasenia_Click(object sender, EventArgs e)
        {
            if (LblContrasenia.Text.Equals(""))
            {
                this.LblContrasenia.Text = ObjCtrAdministrador.GenerarContraseña(); 
            }
        }

        //Boton generarusuarios del formulario de registro de pacientes
        private void BtnGenerarUsuario_Click(object sender, EventArgs e)
        {
            this.LblUsuario.Text = ObjCtrAdministrador.GenerarUsuario(TxtNombre, TxtApaterno, TxtAmaterno, LblIdPaciente).ToLower();
            if (!LblUsuario.Text.Equals(""))
            {
                if (LblIdPaciente.Text.Equals(""))
                {
                    this.BtnGenerarContrasenia.Enabled = true;
                }
            }
        }
        //Boton eliminar del formulario de registro de pacientes
        public void btnborrarusuario_Click(object sender, EventArgs e)
        {
            bool bandera = ObjCtrAdministrador.ValidarBorrar(LblIdPaciente);
            if (bandera.Equals(true))
            {
                this.ObjCtrAdministrador.EliminarUsuario(this.LblIdPaciente);
                this.LlenarTabla();
                this.LimpiarUsuario();
            }

        }
        //Boton limpiar del formulario de registro de pacientes
        public void btnlimpiarusuario_Click(object sender, EventArgs e)
        {
            this.LimpiarUsuario();
        }
        //metodo que vacia las cajas del formulario de registro de pacientes
        public void LimpiarUsuario()
        {
            this.TxtNombre.Clear();
            this.TxtApaterno.Clear();
            this.TxtAmaterno.Clear();
            this.LblContrasenia.Text = "";
            this.LblUsuario.Text = "";
            this.LblIdPaciente.Text = "";
            this.BtnGenerarContrasenia.Enabled = false;
            this.LblNombreCompleto.Text = "";
            this.TxtCorreo.Text = "";
        }

        //------------------------------------------------------------------------

        public void LLenarCmoCategorias()
        {
            SqlDataReader dr = ObjCtrPregunta.LlenarCombo();
            List<Categorias> Lista = new List<Categorias>();
            while (dr.Read())
            {
                Lista.Add(new Categorias() { Descripcion = dr.GetString(1), id = dr.GetInt32(0) });
            }
            CboCategorias.DataSource = Lista;

            CboCategorias.DisplayMember = "Descripcion";
            CboCategorias.ValueMember = "Id";
        }

        public void LlenarTablaPregunta()
        {
            SqlDataReader dr = ObjCtrPregunta.LlenarTabla();
            DgvPreguntas.ColumnCount = 3;
            DgvPreguntas.Columns[0].Name = "Pregunta";
            DgvPreguntas.Columns[0].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
            DgvPreguntas.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
            DgvPreguntas.Columns[1].Name = "idpregunta";
            DgvPreguntas.Columns[1].Visible = false;
            DgvPreguntas.Columns[2].Name = "idtema";
            DgvPreguntas.Columns[2].Visible = false;
            DgvPreguntas.Rows.Clear();
            CboCategorias.SelectedIndex = -1;
            while (dr.Read())
            {
                DgvPreguntas.Rows.Add(dr.GetString(1), dr.GetInt32(0), dr.GetInt32(2));
            }

            this.DgvPreguntas.CellClick += (this.DgvPreguntas_Click);
        }

        public void DgvPreguntas_Click(object sender, DataGridViewCellEventArgs e)
        {
            int rowIndex = e.RowIndex;
            if (rowIndex >= 0)
            {
                txtpregunta.Text = DgvPreguntas.Rows[rowIndex].Cells[0].Value.ToString();
                LblIdPregunta.Text = DgvPreguntas.Rows[rowIndex].Cells[1].Value.ToString();
               
                CboCategorias.SelectedValue = DgvPreguntas.Rows[rowIndex].Cells[2].Value;
                SqlDataReader dr = ObjCtrPregunta.LlamarRespuestas(this.LblIdPregunta);
                int[] valores = new int[4];
                dr.Read();
                txtrespuesta1.Text = dr.GetString(1);
                valores[0] = dr.GetInt32(2);
                dr.Read();
                txtrespuesta2.Text = dr.GetString(1);
                valores[1] = dr.GetInt32(2);
                dr.Read();
                txtrespuesta3.Text = dr.GetString(1);
                valores[2] = dr.GetInt32(2);
                dr.Read();
                txtrespuesta4.Text = dr.GetString(1);
                valores[3] = dr.GetInt32(2);
                int vMayo = ObjCtrPregunta.CompararValor(valores);
                switch (vMayo)
                {
                    case 0:
                        RbnA.Checked = true;
                        break;
                    case 1:
                        RbnB.Checked = true;
                        break;
                    case 2:
                        RbnC.Checked = true;
                        break;
                    case 3:
                        RbnD.Checked = true;
                        break;
                }
            }
        }

        private void BtnGuardarpregunta_Click(object sender, EventArgs e)
        {

            String[] datos = new String[5];
            RadioButton[] CalifRespues = new RadioButton[4];
            string categoria = "";

            datos[0] = this.txtpregunta.Text.ToString();
            datos[1] = this.txtrespuesta1.Text.ToString();
            datos[2] = this.txtrespuesta2.Text.ToString();
            datos[3] = this.txtrespuesta3.Text.ToString();
            datos[4] = this.txtrespuesta4.Text.ToString();
            CalifRespues[0] = this.RbnA;
            CalifRespues[1] = this.RbnB;
            CalifRespues[2] = this.RbnC;
            CalifRespues[3] = this.RbnD;
            if (this.CboCategorias.SelectedValue != null)
            {
                categoria = this.CboCategorias.SelectedValue.ToString();
            }
            bool bandera = ObjCtrPregunta.validacionformulario(this.txtpregunta, this.txtrespuesta1, this.txtrespuesta2, this.txtrespuesta3
                , this.txtrespuesta4, CalifRespues, this.LblIdPregunta, categoria);
            if (bandera)
            {
                ObjCtrPregunta.GuardarPregunta(this.CboCategorias.SelectedValue.ToString(), this.LblIdPregunta, datos, CalifRespues);
                this.LlenarTablaPregunta();
                this.LimpiarPreguntas();
            }
        }

        public void insertar_preguntas()
        {

            if (this.txtpregunta.Text.Trim().ToString() == "")
            {
                MessageBox.Show("El campo pregunta esta vacio");
            }
            else
            {
                if (this.txtrespuesta1.Text.Trim().ToString() == "" || this.txtrespuesta2.Text.Trim().ToString() == "" ||
                    this.txtrespuesta3.Text.Trim().ToString() == "" || this.txtrespuesta4.Text.Trim().ToString() == "")
                {
                    MessageBox.Show("Falta llenar alguna de las respuestas");
                }
                else
                {
                    Conexion con = new Conexion();
                    con.InsertarPregunta(this.txtpregunta.Text.Trim().ToString(), this.txtrespuesta1.Text.Trim().ToString(),
                        this.txtrespuesta2.Text.Trim().ToString(), this.txtrespuesta3.Text.Trim().ToString(),
                        this.txtrespuesta4.Text.Trim().ToString());
                    this.txtpregunta.Clear();
                    this.txtrespuesta1.Clear();
                    this.txtrespuesta2.Clear();
                    this.txtrespuesta3.Clear();
                    this.txtrespuesta4.Clear();

                }
            }
        }

        private void datatabla2(object sender, DataGridViewCellMouseEventArgs e)
        {


            if (e.RowIndex != -1)
            {
                if (e.ColumnIndex != 1)
                {
                    if (!string.IsNullOrEmpty(DgvPreguntas.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString()))
                    {
                    }
                }
            }
        }

        private void BtnLimpiar_Click(object sender, EventArgs e)
        {
            this.LimpiarPreguntas();
        }

        public void LimpiarPreguntas()
        {
            this.txtpregunta.Clear();
            this.txtrespuesta1.Clear();
            this.txtrespuesta2.Clear();
            this.txtrespuesta3.Clear();
            this.txtrespuesta4.Clear();
            this.CboCategorias.SelectedIndex = -1;
            this.RbnA.Checked = false;
            this.RbnB.Checked = false;
            this.RbnC.Checked = false;
            this.RbnD.Checked = false;
            this.LblIdPregunta.Text = "";
        }

        private void btneliminar_Click(object sender, EventArgs e)
        {
            ObjCtrPregunta.BajaPregunta(LblIdPregunta);
            this.LimpiarPreguntas();
            this.LlenarTablaPregunta();
        }

        //------------------------------------------------------------------------------
        //--------------------------------ToolStrip-------------------------------------
        //------------------------------------------------------------------------------

        private void registroToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.PnlAgregarPregunta.Visible = false;
            this.PnlAgregarUsuario.Visible = true;
            this.LimpiarUsuario();
        }
        private void formularioToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.PnlAgregarUsuario.Visible = false;
            this.PnlAgregarPregunta.Visible = true;

        }
        private void cerrarToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Login lg = new Login();
            lg.Show();
            this.Hide();
        }

        private void pacientesToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.PnlAgregarPregunta.Visible = false;
            this.PnlAgregarUsuario.Visible = true;
            this.LimpiarUsuario();
        }

    }
}
